% !Mode:: "TeX:UTF-8"

\chapter{项目设计文档}

\section{系统总体设计}

随着现代化、城市化的发展速度加快，外卖行业的市场规模在不断扩大。为增强企业的竞争力，企划开发一款“饿了么”外卖App，以满足当代人们日渐增长的
便捷饮食需求，并为线下的饮食商家提供线上销售的接口，同时，该App具有满足用户个性化需求、存储历史订单、推荐适宜商家的功能。

\begin{figure}[htbp]
  \centering
  \includegraphics[width=0.3\textwidth]{jiegougai}
  \caption{设计结构概述}\label{fig:jiegougai}
  \vspace{\baselineskip}
  \end{figure}
  
结合现有的系统代码结构和情况，考虑使用Springboot + Vue3的方案来设计该“饿了么”外卖平台App，采用前后端分离的策略，从而方便
前后端的代码实现和前后端接口的设计。

\begin{figure}[htbp]
  \centering
  \includegraphics[width=0.5\textwidth]{jiagou}
  \caption{整体技术架构}\label{fig:jiagou}
  \vspace{\baselineskip}
  \end{figure}

\section{数据库设计说明}

\subsection{用户端数据库设计}
用户相关数据表如下。

用户信息表（user）
\begin{table}[htbp]
  \caption{用户信息表}\label{tab:user}
  \vspace{0.5em}\wuhao
  \begin{tabularx}{\textwidth}{XXXX}
  \toprule[1.5pt]
    No & 字段名 & 数据类型 &说明\\\midrule[1pt]
    1 & userId & varchar&用户编号\\
    2 & password &varchar&密码 \\
    3 & usesName &varchar&用户名称\\
    4 & usesSex &int&用户性别\\
    5 & useImg &mediumtext&用户头像\\
    6 & delTag &int&删除标记\\
    7 & userType &varchar&用户类型\\
    \bottomrule[1.5pt]
    \end{tabularx}
    \vspace{\baselineskip}
    \end{table}

用户购物车表（cart）
\begin{table}[htbp]
  \caption{用户购物车表}\label{tab:cart}
  \vspace{0.5em}\wuhao
  \begin{tabularx}{\textwidth}{XXXX}
  \toprule[1.5pt]
    No & 字段名 & 数据类型 &说明\\\midrule[1pt]
    1 & cartId & int&编号\\
    2 & foodId &int&食品编号 \\
    3 & businessId &int&所属商家编号\\
    4 & userId &varchar&所属用户编号\\
    5 & quantity &int&购买数量\\
    \bottomrule[1.5pt]
    \end{tabularx}
    \vspace{\baselineskip}
    \end{table}

订单明细表（orderdetials）
\begin{table}[htbp]
  \caption{用户订单表}\label{tab:orderdetials}
  \vspace{0.5em}\wuhao
  \begin{tabularx}{\textwidth}{XXXX}
  \toprule[1.5pt]
    No & 字段名 & 数据类型 &说明\\\midrule[1pt]
    1 & odId & int&订单明细编号\\
    2 & orderId &int&所属订单编号 \\
    3 & foodId &int&所属食品编号\\
    4 & quantity &int&数量\\
    \bottomrule[1.5pt]
    \end{tabularx}
    \vspace{\baselineskip}
    \end{table}
    

用户订单表（orders）

\begin{table}[H]
  \caption{用户订单表}\label{tab:orders}
  \vspace{0.5em}\wuhao
  \begin{tabularx}{\textwidth}{XXXX}
  \toprule[1.5pt]
    No & 字段名 & 数据类型 &说明\\\midrule[1pt]
    1 & orderId & int&订单编号\\
    2 & userId &varchar&所属用户编号 \\
    3 & businessId &int&所属商家编号\\
    4 & orderDate &varchar&订单日期\\
    5 & orderTotal &decimal&订单总价\\
    6 & daId &int&送货地址编号\\
    7 & orderState&int&订单状态\\
    \bottomrule[1.5pt]
    \end{tabularx}
    \vspace{\baselineskip}
    \end{table}
  

% 头像表（images）

% \begin{table}[H]
%   \caption{头像表}\label{tab:img}
%   \vspace{0.5em}\wuhao
%   \begin{tabularx}{\textwidth}{XXXX}
%   \toprule[1.5pt]
%     No & 字段名 & 数据类型 &说明\\\midrule[1pt]
%     1 & imgId & int&头像编号\\
%     2 & imgData &mediumtext&头像Base64编码 \\
%     \bottomrule[1.5pt]
%     \end{tabularx}
%     \vspace{\baselineskip}
%     \end{table}
    

用户地址表（deliveryaddress）

\begin{table}[H]
  \caption{用户订单表}\label{tab:deliveryaddress}
  \vspace{0.5em}\wuhao
  \begin{tabularx}{\textwidth}{XXXX}
  \toprule[1.5pt]
    No & 字段名 & 数据类型 &说明\\\midrule[1pt]
    1 & daId & int&送货地址编号\\
    2 & contactName &varchar&联系人姓名 \\
    3 & contactSex &int&联系人性别\\
    4 & contactTel &varchar&联系人电话\\
    5 & address &decimal&送货地址\\
    6 & userId &int&所属用户编号\\
    \bottomrule[1.5pt]
    \end{tabularx}
    \vspace{\baselineskip}
    \end{table}
  

\subsection{商家端数据库设计}
商家相关数据表如下。

商家信息表（business）

\begin{table}[H]
  \caption{商家信息表}\label{tab:business}
  \vspace{0.5em}\wuhao
  \begin{tabularx}{\textwidth}{XXXX}
  \toprule[1.5pt]
    No & 字段名 & 数据类型 &说明\\\midrule[1pt]
    1 & businessId & int&商家编号\\
    2 & businessName &varchar&商家名称 \\
    3 & businessAddress &varchar&商家地址\\
    4 & businessExplain &varchar&商家介绍\\
    5 & businessImg &mediumtext&商家图片\\
    6 & orderTypeId &int&点餐分类\\
    7 & starPrice&decimal&起送费\\
    8 & deviveryPrice &decimal&配送费\\
    9 & remarks&varchar&备注\\
    \bottomrule[1.5pt]
    \end{tabularx}
    \vspace{\baselineskip}
    \end{table}
  
食品表（food）

\begin{table}[H]
  \caption{食品表}\label{tab:food}
  \vspace{0.5em}\wuhao
  \begin{tabularx}{\textwidth}{XXXX}
  \toprule[1.5pt]
    No & 字段名 & 数据类型 &说明\\\midrule[1pt]
    1 & foodId & int&食品编号\\
    2 & foodName &varchar&食品名称 \\
    3 & foodExplain &varchar&食品介绍\\
    4 & foodImg &mediumtext&食品图片\\
    5 & foodPrice &decimal&食品价格\\
    6 & businessId &int&所属商家编号\\
    7 & remarks&varchar&备注\\
    \bottomrule[1.5pt]
    \end{tabularx}
    \vspace{\baselineskip}
    \end{table}
  
% \subsection{设计}

% \subsection{新增功能数据库设计}
% 新增功能相关数据表如下。

% 支付记录表（payment）

% \begin{table}[H]
%   \caption{支付记录表}\label{tab:payment}
%   \vspace{0.5em}\wuhao
%   \begin{tabularx}{\textwidth}{XXXX}
%   \toprule[1.5pt]
%     No & 字段名 & 数据类型 &说明\\\midrule[1pt]
%     1 & paymentId & int&支付记录编号\\
%     2 & orderId &int&所属订单编号 \\
%     3 & paymentMethod &varchar&支付方式\\
%     4 & paymentAmount &decimal&支付金额\\
%     5 & paymentStatus &int&支付状态\\
%     6 & paymentTime &varchar&支付时间\\
%     7 & transactionId &varchar&第三方交易号\\
%     \bottomrule[1.5pt]
%     \end{tabularx}
%     \vspace{\baselineskip}
%     \end{table}

% 订单状态表（orderStatus）

% \begin{table}[H]
%   \caption{订单状态表}\label{tab:orderStatus}
%   \vspace{0.5em}\wuhao
%   \begin{tabularx}{\textwidth}{XXXX}
%   \toprule[1.5pt]
%     No & 字段名 & 数据类型 &说明\\\midrule[1pt]
%     1 & statusId & int&状态记录编号\\
%     2 & orderId &int&所属订单编号 \\
%     3 & statusType &varchar&状态类型\\
%     4 & statusDescription &varchar&状态描述\\
%     5 & updateTime &varchar&更新时间\\
%     6 & operatorId &varchar&操作员ID\\
%     \bottomrule[1.5pt]
%     \end{tabularx}
%     \vspace{\baselineskip}
%     \end{table}

% 评价表（reviews）

% \begin{table}[H]
%   \caption{评价表}\label{tab:reviews}
%   \vspace{0.5em}\wuhao
%   \begin{tabularx}{\textwidth}{XXXX}
%   \toprule[1.5pt]
%     No & 字段名 & 数据类型 &说明\\\midrule[1pt]
%     1 & reviewId & int&评价编号\\
%     2 & orderId &int&所属订单编号 \\
%     3 & userId &varchar&评价用户编号\\
%     4 & businessId &int&被评价商家编号\\
%     5 & rating &int&评分\\
%     6 & reviewContent &varchar&评价内容\\
%     7 & reviewTime &varchar&评价时间\\
%     8 & replyContent &varchar&商家回复内容\\
%     9 & replyTime &varchar&回复时间\\
%     \bottomrule[1.5pt]
%     \end{tabularx}
%     \vspace{\baselineskip}
%     \end{table}

% 消息推送表（notifications）

% \begin{table}[H]
%   \caption{消息推送表}\label{tab:notifications}
%   \vspace{0.5em}\wuhao
%   \begin{tabularx}{\textwidth}{XXXX}
%   \toprule[1.5pt]
%     No & 字段名 & 数据类型 &说明\\\midrule[1pt]
%     1 & notificationId & int&消息编号\\
%     2 & userId &varchar&接收用户编号 \\
%     3 & notificationType &varchar&消息类型\\
%     4 & title &varchar&消息标题\\
%     5 & content &varchar&消息内容\\
%     6 & isRead &int&是否已读\\
%     7 & createTime &varchar&创建时间\\
%     8 & readTime &varchar&阅读时间\\
%     \bottomrule[1.5pt]
%     \end{tabularx}
%     \vspace{\baselineskip}
%     \end{table}

% 优惠券表（coupons）

% \begin{table}[H]
%   \caption{优惠券表}\label{tab:coupons}
%   \vspace{0.5em}\wuhao
%   \begin{tabularx}{\textwidth}{XXXX}
%   \toprule[1.5pt]
%     No & 字段名 & 数据类型 &说明\\\midrule[1pt]
%     1 & couponId & int&优惠券编号\\
%     2 & couponName &varchar&优惠券名称 \\
%     3 & couponType &varchar&优惠券类型\\
%     4 & discountValue &decimal&优惠金额\\
%     5 & minOrderAmount &decimal&最低消费金额\\
%     6 & validFrom &varchar&有效期开始\\
%     7 & validTo &varchar&有效期结束\\
%     8 & totalCount &int&总数量\\
%     9 & usedCount &int&已使用数量\\
%     \bottomrule[1.5pt]
%     \end{tabularx}
%     \vspace{\baselineskip}
%     \end{table}

% 用户优惠券表（userCoupons）
% \begin{table}[H]
%   \caption{用户优惠券表}\label{tab:userCoupons}
%   \vspace{0.5em}\wuhao
%   \begin{tabularx}{\textwidth}{XXXX}
%   \toprule[1.5pt]
%     No & 字段名 & 数据类型 &说明\\\midrule[1pt]
%     1 & userCouponId & int&用户优惠券编号\\
%     2 & userId &varchar&用户编号 \\
%     3 & couponId &int&优惠券编号\\
%     4 & isUsed &int&是否已使用\\
%     5 & usedTime &varchar&使用时间\\
%     6 & orderId &int&使用订单编号\\
%     7 & getTime &varchar&获得时间\\
%     \bottomrule[1.5pt]
%     \end{tabularx}
%     \vspace{\baselineskip}
%     \end{table}

% 搜索历史表（searchHistory）
% \begin{table}[H]
%   \caption{搜索历史表}\label{tab:searchHistory}
%   \vspace{0.5em}\wuhao
%   \begin{tabularx}{\textwidth}{XXXX}
%   \toprule[1.5pt]
%     No & 字段名 & 数据类型 &说明\\\midrule[1pt]
%     1 & searchId & int&搜索记录编号\\
%     2 & userId &varchar&用户编号 \\
%     3 & searchKeyword &varchar&搜索关键词\\
%     4 & searchType &varchar&搜索类型\\
%     5 & searchTime &varchar&搜索时间\\
%     6 & resultCount &int&结果数量\\
%     \bottomrule[1.5pt]
%     \end{tabularx}
%     \vspace{\baselineskip}
%     \end{table}

% 用户设置表（userSettings）
% \begin{table}[H]
%   \caption{用户设置表}\label{tab:userSettings}
%   \vspace{0.5em}\wuhao
%   \begin{tabularx}{\textwidth}{XXXX}
%   \toprule[1.5pt]
%     No & 字段名 & 数据类型 &说明\\\midrule[1pt]
%     1 & settingId & int&设置编号\\
%     2 & userId &varchar&用户编号 \\
%     3 & settingKey &varchar&设置键\\
%     4 & settingValue &varchar&设置值\\
%     5 & updateTime &varchar&更新时间\\
%     \bottomrule[1.5pt]
%     \end{tabularx}
%     \vspace{\baselineskip}
%     \end{table}

\section{接口设计说明}

\subsection{前后端大接口}

\subsubsection{用户信息管理}
\begin{itemize}
  \item  \textbf{注册}
  
UserController/saveUser

参数：User user

返回值：response,success为注册成功，error为注册失败

功能：向数据表user中加入新的一列，表示增加一个新用户

  \item \textbf{登录}
  
  UserController/getUserByIdByPass
  
  参数：User user
  
  返回值：response,success为注册成功，error为注册失败
  
  功能：验证用户输入的账号密码是否有与数据库中存储得一致，返回信息
  
  \item \textbf{修改个人信息}
  
  UserController/updateUserById
  
  参数：User user
  
  返回值：int（0、1）1成功、0失败
  
  功能：修改数据库中相应信息，将前端输入的信息传入数据库
  
  \item \textbf{注销账户}
  
  UserController/removeUser
  
  参数：User user
  
  返回值：int（0、1）1成功、0失败
  
  功能：删除数据库中相应信息
\end{itemize}



\subsubsection{用户订单管理}
\begin{itemize}
  \item  \textbf{创建订单}
  
  OrdersController/createOrders

参数：Orders orders

返回值：int（0、1）1成功、0失败

功能：向数据表orders中加入新的一列，表示增加一个新的订单

  \item \textbf{列举订单}
  
  OrdersController/listOrdersByUserId
  
  参数：Orders orders
  
  返回值：订单表数组
  
  功能：将所属用户存储在order中的订单信息存储在数组中返回
  
  \item \textbf{支付订单}
  
  OrdersController/turnOrderState
  
  参数：Orders orders
  
  返回值：int（0、1）1成功、0失败
  
  功能：将对应订单的支付状态从1改为0
  
  \item \textbf{查询订单明细}
  
  OrderDetailetController/listOrderDetailetByOrderId
  
  参数：Orders orders
  
  返回值：订单明细表数组
  
  功能：根据订单ID获取订单明细

\end{itemize}

\subsubsection{用户地址管理}
\begin{itemize}
  \item  \textbf{列举地址}
  
  DeliveryAddressController/listDeliveryAddressByUserId

参数：DeliveryAddress deliveryAddress

返回值：地址表数组

功能：根据用户ID列举地址表数组

  \item \textbf{新增地址}
  
  DeliveryAddressController/saveDeliveryAddress
  
  参数：DeliveryAddress deliveryAddress
  
  返回值：int（0、1）1成功、0失败
  
  功能：向Address表中插入新的列，表示增加一个新的地址
  
  \item \textbf{修改地址}
  
  DeliveryAddressController/updateDeliveryAddress
  
  参数：DeliveryAddress deliveryAddress
  
  返回值：int（0、1）1成功、0失败
  
  功能：修改数据表中相应地址的相应信息
  
  \item \textbf{删除地址}
  
  DeliveryAddressController/removeDeliveryAddress
  
  参数：DeliveryAddress deliveryAddress

  返回值：int（0、1）1成功、0失败
  
  功能：删除数据库中相应地址信息

\end{itemize}

\subsubsection{用户购物车管理}
\begin{itemize}
  \item  \textbf{列举购物车}
  
  CartController/listCart

参数：Cart cart

返回值：response信息

功能：根据用户ID列举Cart数组

  \item \textbf{新增购物车}
  
  CartController/saveCart
  
  参数：Cart cart
  
  返回值：response信息
  
  功能：向Cart表中插入新的列，表示增加一个新的地址
  
  \item \textbf{修改购物车}
  
  CartController/updateCart
  
  参数：Cart cart
  
  返回值：response信息
  
  功能：修改数据表中相应购物车的相应信息
  
  \item \textbf{删除购物车}
  
  CartController/removeCart
  
  参数：Cart cart

  返回值：response信息
  
  功能：删除数据库中相应购物车信息

\end{itemize}


\subsubsection{商家信息管理}
\begin{itemize}
  \item  \textbf{列举商家}
  
  BusinessController//listBusinessByOrderTypeId/{orderTypeId}

参数：Integer orderTypeId

返回值：response信息

功能：根据商家的分类ID列举商家数组

  \item \textbf{查找商家}
  
  BusinessController/getBusinessById/{businessId}
  
  参数：Integer businessId
  
  返回值：response信息
  
  功能：根据商家的ID列举商家信息
  
  \item \textbf{新增商家}
  
  BusinessController/saveBusiness
  
  参数：Business business
  
  返回值：response信息
  
  功能：向Business表中插入新的列，表示增加一个新的商家
  
  \item \textbf{列举商品}
  
  FoodController/listFoodByBusinessId
  
  参数：Food food

  返回值：food数据表数组
  
  功能：根据商家的ID列举商家的商品数组

  \item \textbf{修改商品信息}
  
  FoodController/updateFood
  
  参数：Food food

  返回值：response信息
  
  功能：修改数据表中相应商品的相应信息
\end{itemize}

% \subsection{新增功能接口管理}

% \subsubsection{支付系统管理}
% \begin{itemize}
%   \item \textbf{创建支付记录}
  
%   PaymentController/createPayment
  
%   参数：Payment payment
  
%   返回值：response信息
  
%   功能：创建支付记录，记录支付方式和金额

%   \item \textbf{查询支付记录}
  
%   PaymentController/getPaymentByOrderId
  
%   参数：Integer orderId
  
%   返回值：response信息
  
%   功能：根据订单ID查询支付记录

%   \item \textbf{更新支付状态}
  
%   PaymentController/updatePaymentStatus
  
%   参数：Payment payment
  
%   返回值：response信息
  
%   功能：更新支付状态，处理支付结果回调
% \end{itemize}

% \subsubsection{订单状态追踪}
% \begin{itemize}
%   \item \textbf{更新订单状态}
  
%   OrderStatusController/updateOrderStatus
  
%   参数：OrderStatus orderStatus
  
%   返回值：response信息
  
%   功能：更新订单状态，记录状态变更历史

%   \item \textbf{查询订单状态历史}
  
%   OrderStatusController/getOrderStatusHistory
  
%   参数：Integer orderId
  
%   返回值：response信息
  
%   功能：查询订单状态变更历史记录
% \end{itemize}

% \subsubsection{评价系统管理}
% \begin{itemize}
%   \item \textbf{创建评价}
  
%   ReviewController/createReview
  
%   参数：Review review
  
%   返回值：response信息
  
%   功能：用户对订单进行评价

%   \item \textbf{查询商家评价}
  
%   ReviewController/getReviewsByBusinessId
  
%   参数：Integer businessId
  
%   返回值：response信息
  
%   功能：查询商家的所有评价

%   \item \textbf{商家回复评价}
  
%   ReviewController/replyReview
  
%   参数：Review review
  
%   返回值：response信息
  
%   功能：商家回复用户评价
% \end{itemize}

% \subsubsection{消息推送功能}
% \begin{itemize}
%   \item \textbf{发送推送消息}
  
%   NotificationController/sendNotification
  
%   参数：Notification notification
  
%   返回值：response信息
  
%   功能：向用户发送推送消息

%   \item \textbf{查询用户消息}
  
%   NotificationController/getUserNotifications
  
%   参数：String userId
  
%   返回值：response信息
  
%   功能：查询用户的所有消息

%   \item \textbf{标记消息已读}
  
%   NotificationController/markAsRead
  
%   参数：Integer notificationId
  
%   返回值：response信息
  
%   功能：标记消息为已读状态
% \end{itemize}

% \subsubsection{优惠券管理}
% \begin{itemize}
%   \item \textbf{创建优惠券}
  
%   CouponController/createCoupon
  
%   参数：Coupon coupon
  
%   返回值：response信息
  
%   功能：创建新的优惠券

%   \item \textbf{用户领取优惠券}
  
%   UserCouponController/claimCoupon
  
%   参数：UserCoupon userCoupon
  
%   返回值：response信息
  
%   功能：用户领取优惠券

%   \item \textbf{查询用户优惠券}
  
%   UserCouponController/getUserCoupons
  
%   参数：String userId
  
%   返回值：response信息
  
%   功能：查询用户拥有的优惠券

%   \item \textbf{使用优惠券}
  
%   UserCouponController/useCoupon
  
%   参数：UserCoupon userCoupon
  
%   返回值：response信息
  
%   功能：在订单中使用优惠券
% \end{itemize}

% \subsubsection{搜索筛选功能}
% \begin{itemize}
%   \item \textbf{搜索商家}
  
%   SearchController/searchBusiness
  
%   参数：SearchRequest searchRequest
  
%   返回值：response信息
  
%   功能：根据关键词搜索商家

%   \item \textbf{搜索菜品}
  
%   SearchController/searchFood
  
%   参数：SearchRequest searchRequest
  
%   返回值：response信息
  
%   功能：根据关键词搜索菜品

%   \item \textbf{保存搜索历史}
  
%   SearchHistoryController/saveSearchHistory
  
%   参数：SearchHistory searchHistory
  
%   返回值：response信息
  
%   功能：保存用户搜索历史

%   \item \textbf{获取搜索历史}
  
%   SearchHistoryController/getSearchHistory
  
%   参数：String userId
  
%   返回值：response信息
  
%   功能：获取用户搜索历史
% \end{itemize}

% \subsubsection{用户设置管理}
% \begin{itemize}
%   \item \textbf{更新用户设置}
  
%   UserSettingController/updateUserSetting
  
%   参数：UserSetting userSetting
  
%   返回值：response信息
  
%   功能：更新用户个性化设置

%   \item \textbf{获取用户设置}
  
%   UserSettingController/getUserSettings
  
%   参数：String userId
  
%   返回值：response信息
  
%   功能：获取用户所有设置
% \end{itemize}

\subsection{后端内部接口}

\begin{itemize}
  \item  \textbf{用户操作部分}
  
  service层提供给controller的接口

  \begin{figure}[H]
    \centering
    \includegraphics[width=0.7\textwidth]{userSer}
    \caption{用户信息接口}\label{fig:userSer}
    \vspace{\baselineskip}
    \end{figure}
  
  getUserByIdByPass：确认用户输入的账号密码是否正确

  getUserById：查询用户

  saveUser：注册用户

  updateUserById：修改用户信息

  removeUser：注销用户

  \begin{figure}[H]
    \centering
    \includegraphics[width=0.7\textwidth]{cartSer}
    \caption{用户购物车接口}\label{fig:cartSer}
    \vspace{\baselineskip}
    \end{figure}
  
  listCart：列举购物车信息

  saveCart：将商品加入购物车

  updateCart：更新购物车

  removeCart：删除数据库中相应购物车信息
  
  \begin{figure}[H]
    \centering
    \includegraphics[width=0.7\textwidth]{odSer}
    \caption{用户订单接口}\label{fig:odSer}
    \vspace{\baselineskip}
    \end{figure}

  createOrders：创建订单

  getOrdersById：查询订单

  listOrdersByUserId：列举用户订单

  turnOrderState：转换用户订单状态，支付订单

  \begin{figure}[H]
    \centering
    \includegraphics[width=0.7\textwidth]{odeSer}
    \caption{用户订单明细接口}\label{fig:odeSer}
    \vspace{\baselineskip}
    \end{figure}

  saveOrderDetailetBench：批量保存订单明细

  listOrderDetailetByOrderId：根据订单ID获取订单明细

    \begin{figure}[H]
      \centering
      \includegraphics[width=0.7\textwidth]{addSer}
      \caption{用户地址接口}\label{fig:addSer}
      \vspace{\baselineskip}
      \end{figure}

  listDeliveryAddressByUserId：列举用户地址

  getBusinessById：获取用户地址

  saveDeliveryAddress：新增用户地址

  updateDeliveryAddress：修改用户地址

  removeDeliveryAddress：删除用户地址

  \hspace*{\fill}

  \item  \textbf{商家操作部分}
  
  service层提供给controller的接口
  
  \begin{figure}[H]
    \centering
    \includegraphics[width=0.7\textwidth]{businessSer}
    \caption{商家信息接口}\label{fig:businessSer}
    \vspace{\baselineskip}
    \end{figure}

  listBusinessByOrderTypeId：根据商家的分类ID列举商家数组

  getBusinessById：根据商家的ID列举商家信息

  saveBusiness：新增新的商家
  
 \begin{figure}[H]
      \centering
      \includegraphics[width=0.7\textwidth]{foodSer}
      \caption{商家商品接口}\label{fig:foodSer}
      \vspace{\baselineskip}
      \end{figure}

  listFoodByBusinessId：根据商家的ID列举商家的商品数组

  updateFood：修改数据表中相应商品的相应信息

  \hspace*{\fill}

\end{itemize}

\section{业务对象设计说明}

该部分从横向和纵向两个角度分析项目的业务对象设计，主要描述项目的
代码架构和功能模块。

\begin{itemize}
  \item  \textbf{横向分析-代码架构}
  
  后端代码基于SPringBoot框架，主要分为三层架构，分别为Service层、Mapper层和Controller层，
  结构如下图所示。
  
  \begin{figure}[H]
    \centering
    \includegraphics[width=0.7\textwidth]{sanceng}
    \caption{SpringBoot三层架构}\label{fig:sanceng}
    \vspace{\baselineskip}
    \end{figure}

    controller层向上层即前端提供接口，使得前端可以调用后端接口，起到了连接前后端的作用，在该项目中controller层单独存储在controller文件夹中。
    需要说明的是，在该层的设计中，选择了多种方式使代码结构更完善，如引入DTO类，以保证只从后端传送必要的信息到前端，而不暴露用户的隐私信息；
    以及修改前后端接口形式，使其更加满足RESTful风格。


    service层实现具体业务代码，向下调用Mapper层的函数以向数据库获取数据，向上实现Controller层提供
    给前端的接口的具体逻辑。该外卖App中的service层提供给controller层的接口集合放在Service文件夹中(如上文所展示的一样)，
    具体的实现放在ServiceImpl类中(如下图~\ref{fig:impl}~所示)，这体现了面向接口而非实现编程的设计原则。

    \begin{figure}[H]
      \centering
      \includegraphics[width=0.7\textwidth]{impl}
      \caption{ServiceImpl类实现示例}\label{fig:impl}
      \vspace{\baselineskip}
      \end{figure}

    Mapper层分为主要分为两个部分，分别为负责用户信息查询删改的userMapper、ordersMapper、orderdetialetMapper、cartMapper等，以及负责商家信息查询删改的
    BusinessMapper、foodMapper等。这些都体现了SRP 单一职责设计原则，部分实现如下~\ref{fig:impl}~所示。

    \begin{figure}[H]
      \centering
      \includegraphics[width=0.8\textwidth]{controller}
      \caption{Mapper层实现示例}\label{fig:controller}
      \vspace{\baselineskip}
      \end{figure}

   \item  \textbf{纵向分析-功能模块}
   
   该项目的功能模块主要分为两类，分别为用户功能模块和商家功能模块，两个模块内部本身涉及的业务逻辑比较简单，即增加、删除、修改、查询等；值得一提的是该项目在用户admin权限
   注册时即将用户分为客户和商家两类，注册成功后后续登陆时也会分别对应不同身份，具有不同功能。下面进行具体解释。
   \begin{enumerate}
    \item{用户区分模块：}
    在数据库表user中设置usertype属性，来区分用户是商家或是客户。在首页操作页面，前端设置选项按钮，来决定用户行为。
    \item{用户功能模块：}
    不同的用户身份具有不同的用户功能。例如，商家模块中，商家可以修改商品名称、价格、简介等，可以增加商品、删除商品；
    客户模块中，客户可以点餐加入购物车、形成订单、支付订单、取消订单等。由于前文均有详细说明，在此处不一一赘述。
  \end{enumerate}
  \end{itemize}

\chapter{项目测试文档}

\section{项目概述}
“饿了么”外卖App是一个基于移动端的外卖订餐平台，旨在为用户提供
快速、便捷的餐饮外卖服务。用户可以通过该应用选择商家、浏览菜单、下单
并支付，商家可以通过该应用增加、修改和删除菜品。

\section{测试目的}
确保“饿了么”外卖App的所有功能、性能和用户体验符合产品设计需求和
质量标准，保证应用在不同设备、网络环境下的稳定性和兼容性，同时确认该
外卖app的安全性要求。

\section{测试范围}
\begin{itemize}
  \item 用户注册与登录功能
  \item 餐厅列表及菜单浏览功能
  \item 订单创建及支付功能
  \item 用户个人信息管理
  \item 应用性能与稳定性
  \item 网络环境兼容性测试（2G/3G/4G/5G/Wi-Fi）
  \item 安全性测试
\end{itemize}

\section{测试方案}
\subsection{测试类型}
\begin{itemize}
  \item 功能测试：确保所有功能模块按预期工作。
  \item 接口测试：基于RESTful API（在Apifox中管理的接口）进行测试，确保接口逻辑、数据返回和错误处理正确。
  \item 集成测试：验证各个模块（用户、店铺、商品、订单、购物车、支付等）之间的数据交互和流程衔接是否正确。
  \item 界面测试：验证UI界面是否符合设计规范，操作是否流畅。
\end{itemize}  

\subsection{测试方法}
\begin{itemize}
  \item 手动测试：根据测试用例逐步执行操作，手动检查功能实现。
  \item 自动测试：使用自动化测试工具（如Apifox）进行回归测试。
\end{itemize}  

\section{测试用例设计}
\subsection{功能测试用例}
1.用户注册与登录
\begin{table}[H]
  \caption{用户注册与登录}\label{}
  \vspace{0.5em}\wuhao
  \begin{tabularx}{\textwidth}{XXXXXX}
  \toprule[1.5pt]
用例编号& 用例名称& 前置条件& 操作步骤 &预期结果 &实际结果\\\midrule[1pt]
01&用户注册功能测试 &无&1.打开饿了么App 2.点击“登录”3.输入管理员admin账号及密码4.使用admin权限为新用户注册账号 &退出admin账号，数据库中存在注册信息 & 成功 \\
02&用户登录功能测试 &已注册账号 & 1.打开饿了么App 2.输入已注册的账号和密码3. 点击“登录”&用户成功登录，进入首页&成功 \\
\bottomrule[1.5pt]
    \end{tabularx}
    \vspace{\baselineskip}
    \end{table}

2. 用户个人中心管理
\begin{table}[H]
  \caption{用户个人中心管理}\label{}
  \vspace{0.5em}\wuhao
  \begin{tabularx}{\textwidth}{XXXXXX}
  \toprule[1.5pt]
用例编号& 用例名称& 前置条件& 操作步骤 &预期结果 &实际结果\\\midrule[1pt]
03&修改个人信息功能测试 &用户已登录& 1. 进入“个人中心” 2.点击“个人信息”修改相关信息&用户成功修改个人信息，页面显示已更 新的信息。&成功 \\
04&地址管理功能测试 &用户已登录 & 1. 进入“个人中心”页面 2. 点击“我的地址”3. 添加删除修改地址&地址添加、删除、修改成功，并显示在地址列表中。&成功 \\
\bottomrule[1.5pt]
    \end{tabularx}
    \vspace{\baselineskip}
    \end{table}

3.下单与支付
\begin{table}[H]
  \caption{下单与支付}\label{}
  \vspace{0.5em}\wuhao
  \begin{tabularx}{\textwidth}{XXXXXX}
  \toprule[1.5pt]
用例编号& 用例名称& 前置条件& 操作步骤 &预期结果 &实际结果\\\midrule[1pt]
05&菜品加入购物车测试 &用户已登录& 1. 进入商家详情页2.选择菜品3.点击加号加入购物车&菜品成功加入购物车，购物车图标显示数量更新。&成功 \\
06&创建订单功能测试 &用户已登录 &  1.在购物车页面点击“去结算”2.填写收货地址 3.确认订单&订单创建成功，跳转至支付页面。&成功 \\
07&支付功能测试&用户已登录 & 1.选择支付方式（支付宝、微信）2.完成支付 &支付成功。 &成功 \\
\bottomrule[1.5pt]
    \end{tabularx}
    \vspace{\baselineskip}
    \end{table}

4.订单管理
\begin{table}[H]
  \caption{订单管理}\label{}
  \vspace{0.5em}\wuhao
  \begin{tabularx}{\textwidth}{XXXXXX}
  \toprule[1.5pt]
用例编号& 用例名称& 前置条件& 操作步骤 &预期结果 &实际结果\\\midrule[1pt]
07&查看订单列表功能测试 &用户已下单& 1. 进入“我的订单”页面&页面显示所有订单，显示订单状态、金额和配送信息等。&已支付订单不能正常显示 \\
08&订单详情功能测试 &用户已下单 &  进入“我的订单”页面2.点击任意订单查看详情&页面显示订单详情，订单菜品、配送信息、金额 显示完整。&成功 \\

\bottomrule[1.5pt]
    \end{tabularx}
    \vspace{\baselineskip}
    \end{table}

5.商家列表与详情
\begin{table}[H]
  \caption{商家列表与详情}\label{}
  \vspace{0.5em}\wuhao
  \begin{tabularx}{\textwidth}{XXXXXX}
  \toprule[1.5pt]
用例编号& 用例名称& 前置条件& 操作步骤 &预期结果 &实际结果\\\midrule[1pt]
10&商家列表展示测试 &用户已登录& 1. 进入首页2.点击“附近商家”&页面显示所有分类内的商家。&成功 \\
11&商家详情功能测试 &用户已登录 &  进入餐厅列表2.点击任意商家查看详情&跳转至餐厅详情页面，餐厅名称、地址、菜品列表等显示完整。&成功 \\

\bottomrule[1.5pt]
    \end{tabularx}
    \vspace{\baselineskip}
    \end{table}

\subsection{页面测试用例}
1.首页页面测试
\begin{table}[H]
  \caption{首页页面测试}\label{}
  \vspace{0.5em}\wuhao
  \begin{tabularx}{\textwidth}{XXXXXX}
    \toprule[1.5pt]
    用例编号 & 用例名称 & 前置条件 & 操作步骤 & 预期结果 & 实际结果 \\
    \midrule[1pt]
    01 & 首页布局检查 & 用户已登录 &
    1. 打开饿了么App 2. 进入首页 &
    页面顶部显示搜索栏，首页按分类展示餐厅和推荐，底部导航栏正常显示。 &
    成功 \\
    02 & 页面滚动测试 & 用户已登录 &
    1. 打开饿了么App 2. 向下滑动页面查看商家列表 &
    页面可以流畅滚动，滚动过程中图片和文字加载正常，无卡顿现象。 &
    成功 \\
    03 & 首页按钮点击测试 & 用户已登录 &
    1. 点击任意一个商家分类 2. 点击导航栏任意一个按钮 &
    成功跳转至相关页面，页面元素加载正常。 &
    成功 \\
    \bottomrule[1.5pt]
  \end{tabularx}
  \vspace{\baselineskip}
\end{table}

2.商家详情页面测试
\begin{table}[H]
  \caption{商家详情页面测试}\label{}
  \vspace{0.5em}\wuhao
  \begin{tabularx}{\textwidth}{XXXXXX}
    \toprule[1.5pt]
    用例编号 & 用例名称 & 前置条件 & 操作步骤 & 预期结果 & 实际结果 \\
    \midrule[1pt]
    04 & 商家详情页面布局 & 用户已登录 &
    1. 打开某商家详情页面 &
    餐厅名称、配送费、食品分类及菜单等信息正常展示。 &
    成功 \\
    05 & 餐品图片加载测试 & 用户已登录 &
    1. 打开某商家详情页面 2. 浏览餐品列表 &
    所有餐品图片均能正常加载，无延迟或图片缺失。 &
    成功 \\
    06 & 加入购物车功能测试 & 用户已登录 &
    1. 点击任意一个商家分类 2. 点击某餐品“加入购物车”按钮 &
    餐品成功加入购物车，页面底部购物车数量增加。 &
    成功 \\
    \bottomrule[1.5pt]
  \end{tabularx}
  \vspace{\baselineskip}
\end{table}

3.订单页面测试
\begin{table}[H]
  \caption{订单页面测试}\label{}
  \vspace{0.5em}\wuhao
  \begin{tabularx}{\textwidth}{XXXXXX}
    \toprule[1.5pt]
    用例编号 & 用例名称 & 前置条件 & 操作步骤 & 预期结果 & 实际结果 \\
    \midrule[1pt]
    07 & 订单列表布局测试 & 用户已下单 &
    1. 打开“我的订单”页面 &
    所有订单按时间顺序排列。 &
    成功 \\
    08 & 订单状态更新测试 & 用户已下单 &
    1. 下单成功后，打开“我的订单”页面 &
    订单状态自动更新为“未支付”、“已支付”等，状态变化实时展示。 &
    成功 \\
    \bottomrule[1.5pt]
  \end{tabularx}
  \vspace{\baselineskip}
\end{table}

4.支付页面测试
\begin{table}[H]
\caption{支付页面测试}\label{}
\vspace{0.5em}\wuhao
\begin{tabularx}{\textwidth}{XXXXXX}
\toprule[1.5pt]
用例编号 & 用例名称 & 前置条件 & 操作步骤 & 预期结果 & 实际结果 \\
\midrule[1pt]
09 & 支付页面布局测试 & 用户已下单 & 1. 进入支付页面 2. 选择不同的支付方式（支付宝、微信） & 不同支付方式按钮正常显示，点击后成功进入支付流程。 & 成功 \\
10 & 订单状态更新测试 & 用户已下单 & 1. 进入支付页面 & 页面布局符合设计规范，显示支付金额、支付方式及“确认支付”按钮。 & 成功 \\
11 & 支付成功页面跳转测试 & 用户已支付 & 1. 支付成功后，查看跳转页面 & 支付成功后自动跳转至订单页面，并显示已支付状态。 & 成功 \\
\bottomrule[1.5pt]
\end{tabularx}
\vspace{\baselineskip}
\end{table}

5.个人中心页面测试
\begin{table}[H]
\caption{个人中心页面测试}\label{}
\vspace{0.5em}\wuhao
\begin{tabularx}{\textwidth}{XXXXXX}
\toprule[1.5pt]
用例编号 & 用例名称 & 前置条件 & 操作步骤 & 预期结果 & 实际结果 \\
\midrule[1pt]
UI-012 & 个人信息查看功能测试 & 用户已登录 & 1. 打开“个人中心”页面 2. 点击“个人信息”查看按钮 & 成功跳转至个人信息页面，用户基本信息均能正常显示。 & 成功 \\
UI-013 & 修改个人信息功能测试 & 用户已登录 & 1. 进入“个人中心”页面 2. 点击“修改信息”按钮，修改昵称 & 成功修改个人信息，并能在个人中心页面查看已更新的信息。 & 成功 \\
\bottomrule[1.5pt]
\end{tabularx}
\vspace{\baselineskip}
\end{table}

6.通用页面交互测试
\begin{table}[H]
\caption{通用页面交互测试}\label{}
\vspace{0.5em}\wuhao
\begin{tabularx}{\textwidth}{XXXXXX}
\toprule[1.5pt]
用例编号 & 用例名称 & 前置条件 & 操作步骤 & 预期结果 & 实际结果 \\
\midrule[1pt]
UI-014 & 返回按钮功能测试 & 用户已登录 & 1. 在任意二级页面点击"返回"按钮 & 正常返回至上一页面，所有页面交互流畅，无死链或点击无效情况。 & 成功 \\
UI-015 & 页面加载速度测试 & 用户已登录 & 1. 打开任意页面 & 页面加载时间不超过3秒，页面元素显示完整，加载速度符合性能要求。 & 成功 \\
\bottomrule[1.5pt]
\end{tabularx}
\vspace{\baselineskip}
\end{table}



\subsection{直观测试用例}
测试用例表（example）
\begin{table}[H]
  \caption{测试用例表}\label{tab:example}
  \vspace{0.5em}\wuhao
  \begin{tabularx}{\textwidth}{XXXXX}
  \toprule[1.5pt]
  No & API接口 & 用例目的 &输入数据 &预期结果\\\midrule[1pt]
  1 &POST 管理员认证​​ &获取管理员Token，用于后续权限操作 &管理员用户名、密码&返回状态码200，响应体中包含有效的access_token \\
  2 &POST 新增店主​ &创建一个店铺店主账号&店主信息（用户名、密码、手机号等）&返回状态码201，成功创建用户，返回用户ID \\
  3 &POST 新增店铺​&为刚创建的店主创建一个店铺&店铺信息（名称、地址、简介等）&返回状态码201，成功创建店铺，返回店铺ID  \\
  4 &POST 店主身份认证​&获取店主用户的Token&店主的用户名、密码&返回状态码200，响应体中包含有效的店主access_token  \\
  5 &POST 增加商品​&在新建的店铺下添加商品&商品信息（名称、价格、描述等）&返回状态码201，成功创建商品，返回商品ID  \\
  % 6 &POST 新增顾客​&创建一个普通顾客账号&顾客信息（用户名、密码、手机号等）& 返回状态码201，成功创建用户，返回用户ID \\
  % 7 &POST 顾客身份认证​&获取顾客用户的Token&顾客的用户名、密码&返回状态码200，响应体中包含有效的顾客access_token  \\
  % 8 &POST 添加商品到购物车​​&顾客将商品加入购物车&商品ID、数量&返回状态码200/201，购物车更新成功  \\
  % 9 &POST 增加地址​&顾客添加一个收货地址&地址信息（收货人、电话、详细地址等）& 返回状态码201，成功创建地址，返回地址ID \\
  % 10&POST 生成订单​&顾客提交购物车内容生成订单&地址ID、支付方式等& 返回状态码201，订单创建成功，返回订单号及详细信息​ \\
\bottomrule[1.5pt]
  \end{tabularx}
  \vspace{\baselineskip}
  \end{table}

  \begin{table}[H]
    \caption{测试用例表}\label{tab:example}
    \vspace{0.5em}\wuhao
    \begin{tabularx}{\textwidth}{XXXXX}
    \toprule[1.5pt]
    No & API接口 & 用例目的 &输入数据 &预期结果\\\midrule[1pt]
    6 &POST 新增顾客​&创建一个普通顾客账号&顾客信息（用户名、密码、手机号等）& 返回状态码201，成功创建用户，返回用户ID \\
    7 &POST 顾客身份认证​&获取顾客用户的Token&顾客的用户名、密码&返回状态码200，响应体中包含有效的顾客access_token  \\
    8 &POST 添加商品到购物车​​&顾客将商品加入购物车&商品ID、数量&返回状态码200/201，购物车更新成功  \\
    9 &POST 增加地址​&顾客添加一个收货地址&地址信息（收货人、电话、详细地址等）& 返回状态码201，成功创建地址，返回地址ID \\
    10&POST 生成订单​&顾客提交购物车内容生成订单&地址ID、支付方式等& 返回状态码201，订单创建成功，返回订单号及详细信息​ \\
  \bottomrule[1.5pt]
    \end{tabularx}
    \vspace{\baselineskip}
    \end{table}
  

\subsection{其他重要模块测试点}
\subsubsection{店铺管理模块}
\begin{itemize}
  \item GET /api/businesses/{id}​​：验证获取指定店铺信息的准确性。
  \item PUT /updateBusiness​​:验证修改店铺信息功能，检查权限控制（是否只有店主本人可修改）。
  \item DEL /deleteBusiness​​:验证删除店铺功能及其权限控制。
  \item GET /getBusinesses​​:验证获取店铺列表的分页、过滤、排序功能。
\end{itemize}  

\subsubsection{订单管理模块}
\begin{itemize}
  \item 订单状态流转​​：测试订单从已生成-> 已支付-> 商家接单-> 配送中-> 已完成的整个状态机变化是否正确。
  \item 取消订单​​：测试用户和商家在不同状态下取消订单的逻辑和权限。
\end{itemize}

\subsubsection{用户测试模块}
\begin{itemize}
  \item 登录失败处理​​：测试用户名/密码错误、账号被禁用等情况。
  \item Token刷新机制​​：测试Refresh Token的有效性。
  \item 权限控制​​：验证普通用户无法访问管理员接口。
\end{itemize}

\section{完成标准}
\begin{itemize}
  \item 所有测试用例已执行完毕，且关键功能无高优先级缺陷。
  \item 性能测试达到规定标准，如响应时间、加载时间等。
  \item 兼容性测试在所有目标设备及操作系统上表现良好。
  \item 安全性测试通过，用户数据得到有效保护。
\end{itemize}

\section{缺陷管理}
\subsection{缺陷分类}
\begin{itemize}
  \item 功能性缺陷：主要影响核心功能的实现，如无法登录、下单失败。
  \item 界面性缺陷：UI显示错误、按钮不响应等。
  \item 性能性缺陷：加载缓慢、响应时间过长等。
  \item 兼容性缺陷：在特定设备或操作系统版本上出现的问题。
\end{itemize}

\subsection{缺陷报告}
\begin{table}[H]
\caption{缺陷报告}\label{}
\vspace{0.5em}\wuhao
\begin{tabularx}{\textwidth}{XXXXXXX}
\toprule[1.5pt]
缺陷编号 & 缺陷描述 & 复现步骤 & 期望结果 & 实际结果  & 状态 \\
\midrule[1pt]
01 & 订单支付失败 & 1. 用户进入支付页面 2. 选择微信支付 3. 点击"确认支付" & 订单应支付成功，页面跳转至订单详情 & 点击支付后提示"支付失败"，订单状态未更新  & 已修复  \\
02 & 购物车页面显示错误 & 1. 用户添加多件商品至购物车 & 购物车商品列表显示商品和价格正确 & 价格显示不正确 & 已修复  \\
03 & 用户注册失败，无法注册商家 & 1. 进入注册页面 2. 用户身份选择商家 3. 填写注册信息 4. 点击"去注册" & 成功注册商家账号 & 提示注册失败，无法完成商家注册 & 已修复 \\
04 & 已支付订单无法正常显示 & 1. 进入订单页面 2. 选择某个未支付订单进行支付 3. 返回订单页面后刷新 & 已支付订单状态正常更新 & 已支付订单状态未更新，仍显示为未支付  & 未修复 \\
\bottomrule[1.5pt]
\end{tabularx}
\vspace{\baselineskip}
\end{table}
